package main

/*
	-  自定义白名单中间件
	- 可以参考recovery logger的基本实现方法
*/
import (
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {
	r := gin.New()
	r.Use(gin.Logger()) //默认控制台输出
	r.Use(ipWhiteMiddleWare())//使用自定义的中间件
	/**
	//如果不使用这个中间件，遇到panic错误，整个服务就会挂掉。启用后当前执行有问题，但不影响其他的错误执行（）
	错误会到指定的日志里
	*/
	r.Use(gin.Recovery())
	//http://127.0.0.1:8080/stu,测试的时候可以把ip list改为 127.0.0.2
	r.GET("/stu", func(context *gin.Context) {

		context.String(http.StatusOK,"hello,middleware\n")
	})

	r.Run()
}
func ipWhiteMiddleWare() gin.HandlerFunc {

	return func(context *gin.Context) {
		ipList := []string{
			"127.0.0.2",
		}

		flag := false
		clientIp := context.ClientIP()
		for _, host := range ipList {
			if clientIp == host {
				flag = true
				break
			}
		}
		if !flag {
			context.String(401, "%s not in white ip list", clientIp)
			context.Abort()
		}

	}
}
